package com.neusoft.ch9;
/*
 * 课堂笔记：
 * java工具类
 * 1、Object类
 *    是所有类的根类。
 *    Object是java中的所有类的直接或间接父类；
 *    Object中需要子类重写的常用的方法有：
 *    
 *    hashCode(); 
 *       --- 获取该类的HashCode码
 *    equals(Object obj); 
 *       --- 在Object类中，默认实现是判定是否是同一个对象；在子类中，一般会重写为判定该对象的内容是否相同
 *    toString();
 *       --- 在Object类中，默认实现是打印该类HashCode码，在子类中，一般会重写为打印该类的各个属性的内容；
 *           可以使用ide自动重写该方法，右键--source--ganerate toString...
 *           
 * 1.1 == 和 equals的区别
 *    这两个操作符都是进行相等判定，区别是判定内容不一样
 *    == 操作符：判定两个对象实例变量是否是同一个对象（判定两个对象的实例变量的引用地址是否相同）
 *             判定两个对象实例变量指向的内存空间是否是同一块内存空间；
 *    equals方法：判定的是两个对象实例变量的内容是否相同；
 *    总结：
 *        == 判定引用地址是否相同； equals判定内容是否相同；
 *        如果 == 判定结果为 true，则equals判定肯定为true；反之，不一定；
 *        String等对象类型判定内容是否相同则需要使用equals进行判定；
 *        String类已经自动重写了equals方法，String可以直接调用equals判定内容是否相同；
 *        自定义的了需要手动重写该equals方法来实现内容判定相等（结合业务要求）         
 * 
 * 2、包装类
 *    java的数据类型分为：基本类型和引用类型
 *    基本类型：8种基本类型；
 *    引用类型：就直接或间接继承自Object的类的类型。（包括数组）也叫对象类型；默认值是null；
 *    
 *    8种基本类型不支持面向对象，为了将8中基本类型也纳入到面向对象的体系中，则提出了对每种基本类型采用面型对象的方式进行重新定义。
 *    这些重写定义的类就是8中基本类型的包装类；
 *    
 *    包装类类型：将8种基本类型采用面向对象的方式抽象封装的类；
 *    目的：将8种基本类型纳入面向对象的体系中。
 *    
 *       8种基本类型                         8种包装类类型
 *          byte               Byte
 *          short              Short
 *          int                Integer
 *          long               Long
 *          char               Character
 *          float              Float
 *          double             Double
 *          boolean            Boolean
 *   
 *    解析：
 *        包装类类型的默认值是null；
 *    
 *    作用：
 *        支持面型对象；
 *        类型转换；
 *        包装类类型也是按值传参。
 *        
 * 2.1 装箱和拆箱
 * 
 *    装箱：把基本类型转换为包装类类型；
 *    拆箱：把包装类类型转换为基本类型；
 * 2.2 类型转换
 *    基本类型和包装累类型的转换；
 *    基本类型和String类型的转换；
 *    包装类类型和String类型的转换；           
 * 
 * 3、字符串
 *    字符串表示的是一串字符序列的集合；
 *    java使用String类表示字符串，该类是一个final类；
 *    String类型的变量是按值传参的形式；
 *    字符串的长度是不变的，不能动态增加的；
 *    
 *    学习重点：
 *       String类的构造方法；【可以指定编码格式，可以进行转码处理】
 *       String类api提供的各种方法；
 *       String类的内存存储模型；【难点】
 *       字符串和数组一样有索引，索引从0开始；
 * 
 * 
 * 
 */
public class TestCh9 {

	public static void main(String[] args) {
		test02();
	}
	/**
	 * String类型
	 */
	private static void test02() {
		String str0 = "kjfsdjaklf;jsadjfkl;sjadklfjaslkjfdklsajdlk;f";
		String str00 = new  String("klajfk;sadjkl;fjkl;sahfwejkl;rfejw;kljfkl;sd");
		
		// 常用的方法
		System.out.println("转为大写："+str0.toUpperCase());
		char ch = str0.charAt(10);
		System.out.println("下标索引为10的字符："+ch);
		String sub01 = str0.substring(3,5); // sd
		String sub02 = str0.substring(3,str0.length()); // sd
		System.out.println("sub02="+sub02);
		
		int index0 = str0.lastIndexOf("jfjfklsjflkasj"); // 没有找到结果是 -1
		System.out.println("index0="+index0);
		
		String[] strs = str0.split(";");
		System.out.println("split:");
		for (String str : strs) {
			System.out.println(str);
		}
		
		String strNew = str0.replace(";", ":");
		System.out.println("str0="+str0);
		System.out.println("strNew="+strNew);
		
		boolean isBegin = str0.startsWith("kjfsdjaklf");
		System.out.println("isBegin="+isBegin);
	}
	
	/**
	 * 包装类类型
	 */
	private static void test01() {
		int age = 0;
		// 包装类类型
		Integer age0 = null;
		
		//String、基本类型、包装累类型之间的相互转换
		int val = 101;
		// 基本类型--->String
		String strVal = val+"";
		// 基本类型--->包装类类型
		Integer val00 = new Integer(val); // 构造器
		Integer val01 = val; // 默认转换
		Integer val02 = Integer.valueOf(val); // 静态方法 valueOf
		
		// 包装类类型--->基本类型
		int val10 = val00.intValue(); // XXXValue方法
		int val11 = val00; // 包装类类型不能为null
		System.out.println("val11="+val11);
		
		// 包装类类型--->String
		String strVal01 = age0+"";// 包装类类型不能为null
		String strVal02 = val00.toString();
		System.out.println("strVal01="+strVal01);
		
		// String--->基本类型
		int val301 = Integer.parseInt(strVal, 8); // 第二个参数表明被转换的字符串的进制，转换的目标结果进制是10进制
		System.out.println("val301="+val301);
		
		// String--->包装类类型
		Integer val04 = Integer.valueOf(strVal, 16);
		
		System.out.println("int表示的最大的值为："+Integer.MAX_VALUE);
	}

}
